package com.tzl.design_pattern.template_method_pattern;

/**
 * 模板方法模式:<br>
 * &nbsp;&nbsp;是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为设计模式.<br>
 * 应用场景:<br>
 * &nbsp;&nbsp;1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类实现.<br>
 * &nbsp;&nbsp;2. 各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复.<br>
 * 优点:<br>
 * &nbsp;&nbsp;1. 利用模板方法将相同处理逻辑的代码放到抽象弗雷中,可以提高代码的复用性.<br>
 * &nbsp;&nbsp;2. 将不同的代码不同的子类中,通过对子类的扩展增加新的行为,提高代码的扩展性.<br>
 * &nbsp;&nbsp;3. 吧不变的行为写在父类上,去除子类的重复代码,提供了一个很好的代码复用平台,符合开闭原则<br>
 * 缺点:<br>
 * &nbsp;&nbsp;1. 类的数目增加,每一个抽象类都需要一个子类来实现,这样导致类的个数增加.<br>
 * &nbsp;&nbsp;2. 间接的增加了系统实现的复杂度.<br>
 * &nbsp;&nbsp;3. 继承关系自身缺点,如果父类添加新的抽象方法,所有子类都要改一遍.<br>
 *
 * @author Zhilei Tang
 * @date Created in 2020/11/14 21:24
 */
public class TemplateMethodTest {
  public static void main(String[] args) {
    CookingVegetables cooking = new CookingCabbage();
    cooking.cooking();
    cooking = new CookingPotato();
    cooking.cooking();
  }
}
